package socket.socket01;

/**
 * socket这个词可以表示很多概念: 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。
 * 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socketpair就唯一标识一个连接
 * socket本身有“插座”的意思,因此用来描述网络连接的一 对一关系,在Linux下，用于表示进程间网络通信的特殊文件类型，本质为内核借助缓冲区形成的伪文件。既然是文件，那肯定就可以使用文件描述符引用套接字
 *套接字的通信原理如下:
 *    左端通过文件描述符将数据写入发送端缓冲区，右端从接受端缓冲区接受数据，也可以是左端读数据，右端写数据。左右的缓冲区之间就是通过套接字连接。可以看出，socket在通信过程中一定是成对出现（接受端socket和发送端socket）。
 * IP地址：在网络环境中唯一标识一台主机
 * 端口号：在主机中唯一标识一个进程
 * IP+端口号：在网络环境中唯一标识一个进程，对应一个socket，欲建立连接的两个进程各自有一个socket来标识，那么这两个socket组成的socket pair就唯一标识一个连接，因此就可以用socket来描述网络连接的一对一关系。
 *
 * Socket类型：常用的socket类型有
 *       SOCK_STREAM、（sock_stream）
 *       SOCK_DGRAM、(sock_dgram)
 *       SOCK_RAW、(sock_raw)
 *       SOCK_PACKET、(sock_packet)
 *       SOCK_SEQPACKET (sock_seqpacket)等。流式Socket（SOCK_STREAM）是一种面向连接的Socket，针对于面向连接的TCP服务应用。
 *
 *  Linux创建套接字：
 *    int socket(int domain,int type,int protocol)
 *               domain：协议域，又称协议族（family）。常用的协议族有AF_INET、AF_INET6、AF_LOCAL（或称AF_UNIX，UnixSocket）、AF_ROUTE等。协议族决定了socket的地址类型，在通信中必须采用对应的地址，如AF_INET决定了要用ipv4地址（32位的）与端口号（16位的）的组合、AF_UNIX决定了要用一个绝对路径名作为地址
 *               type：指定Socket类型。常用的socket类型有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等。流式Socket（SOCK_STREAM）是一种面向连接的Socket，针对于面向连接的TCP服务应用。
 *               protocol：指定协议。常用协议有IPPROTO_TCP、IPPROTO_UDP、IPPROTO_STCP、IPPROTO_TIPC等，分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。一般设为0，会自动选择第二个参数类型对应的默认协议。
 *
 * 返回值信息：如果调用成功就返回新创建的套接字的描述符，如果失败就返回INVALID_SOCKET（Linux下失败返回-1）。
 *
 *
 *
 *
 */
public class Socket {
}
